package tour.board.service;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import tour.board.dao.EpBoardDAO;
import tour.board.to.EpBoard;
import tour.board.to.PagingBean;
import tour.board.to.ReEpBoard;
import tour.board.to.RecommendTO;
import board.util.Utilities;


@Service
public class EpBoardServiceImpl implements EpBoardService{

@Autowired
private EpBoardDAO epBoardDAO;

	

	public void setBoardDAO(EpBoardDAO epBoardDAO) {
		this.epBoardDAO = epBoardDAO;
	}



	@Override
	public void writeContent(EpBoard bto) throws SQLException {
		//1. 입력일시와 사용자가 입력한 글의 내용을 DB용으로 변환한 것을 매개변수로 받은 board에 설정한다.
		String writeDate = Utilities.getNow();
		String c = Utilities.changeContentForDB(bto.getContent());
		bto.setWritedate(writeDate);
		bto.setContent(c);
		//2. DAO를 이용해 글을 DB에 등록한다.
		epBoardDAO.insertContentForNewCount(bto);
		
	}



	@Override
	public ArrayList<EpBoard> getBoardAllList() throws SQLException {
//		1. DAO의 메소드를 이용해 전체 글내용을 ArrayList로 조회
		ArrayList<EpBoard> list = epBoardDAO.selectBoardAllList();
//		2. 조회한 ArrayList 안의 각 게시물들의 writedate를 yyyy.mm.dd 형태로 변경
		for(EpBoard epBoard:list){
			epBoard.setWritedate(Utilities.changeDayFormat(epBoard.getWritedate()));
		}
		return list;
	}



	@Override
	public EpBoard getContentByNO(int no) throws SQLException {
		//1. DAO의 메소드를 이용해 조회수를 1 증가 시킨다.
		epBoardDAO.updateViewCount(no);
		//2. DAO의 메소드를 이용해 글 정보 조회
		EpBoard epBoard = epBoardDAO.selectContentByNO(no);
		//3. 조회한 글 정보의 writedate를 yyyy.MM.dd HH:mm:ss 형식으로 변경 후 return
		epBoard.setWritedate(Utilities.changeDayTimeFormat(epBoard.getWritedate()));
		return epBoard;
	}



	@Override
	public EpBoard getContentByNoForForm(int no) throws SQLException {
		//1. no값으로 글 조회
		EpBoard epBoard = epBoardDAO.selectContentByNO(no);
		//2. content를 textarea용으로 변경
		epBoard.setContent(Utilities.changeContentForTextArea(epBoard.getContent()));
		return epBoard;
	}



	@Override
	public void modifyContent(EpBoard bto) throws SQLException {
//		1. 입력일시와 사용자가 입력한 글의 내용을 DB용으로 변환한 것을 매개변수로 받은 board에 설정한다.
		bto.setContent(Utilities.changeContentForDB(bto.getContent()));
		bto.setWritedate(Utilities.getNow());
//		2. DAO 메소드를 이용해 수정 처리
		epBoardDAO.updateContent(bto);
		
	}



	@Override
	public void deleteContentByNO(int no) throws SQLException {
		epBoardDAO.deleteContentByNO(no);
		
	}



	@Override
	public void replyContent(EpBoard bto) throws SQLException {
//		1. DAO의 메소드를 이용해 DB에 같은 refamily의 게시물들 중 답변하고자하는 글의 restep 보다 큰 게시물들의 restep들을 1씩 증가시킨다.
		epBoardDAO.updateRestep(bto.getRefamily(), bto.getRestep());
//		2. 등록하려는 게시물 데이터(매개변수로 받은 board)의 restep, relevel을 1 증가시킨다. - board가 가지고 있는 것은 원본글의 값이므로 자신의 값으로 변경하는 것.
		bto.setRestep(bto.getRestep()+1);
		bto.setRelevel(bto.getRelevel()+1);
//		3. 입력일시와 사용자가 입력한 글의 내용을 DB용으로 변환한 것을 매개변수로 받은 board에 설정한다.
		bto.setWritedate(Utilities.getNow());
		bto.setContent(Utilities.changeContentForDB(bto.getContent()));
//		4. DAO의 메소드를 이용해 글을 DB에 넣는다.
		epBoardDAO.insertContentForReply(bto);
		
	}



	@Override
	public Map getBoardListByPage(int page) throws SQLException {
		HashMap map = new HashMap();
//		1. DAO메소드를 이용해 매개변수로 받은 페이지에 보여줄 게시물들을 ArrayList로 조회
		System.out.println(page);
		ArrayList<EpBoard> list = epBoardDAO.selectBoardListByPage(page);
		
//		2. 조회한 ArrayList 안의 각 게시물들의 writedate를 yyyy.mm.dd 형태로 변경
		for(EpBoard epBoard:list){
			epBoard.setWritedate(Utilities.changeDayFormat(epBoard.getWritedate()));
		}
		map.put("list", list);
//		3. PagingBean객체를 생성 ( 필요 정보 : 전체 게시물의 개수, 보고자 하는 페이지 번호)
//		3-1 : DAO의 메소드를 이용해 전체 게시물 수 조회
		int totalContent = epBoardDAO.selectTotalContent();
//		3-2 : PaginBean 객체 생성
		PagingBean pagingBean = new PagingBean(totalContent, page);
		map.put("pagingBean", pagingBean);
		return map;
	}



	@Override
	public ArrayList replyList() {
		return epBoardDAO.replyList();
	}



	@Override
	public void addReply(ReEpBoard reEpBoard) {
		epBoardDAO.addReply(reEpBoard);
	}



	@Override
	public ArrayList getReplyByNo(int no) {
		return epBoardDAO.getReplyByNo(no);
	}
	
	//추천
	@Override
	public String recommend(RecommendTO rto) throws SQLException{
		 return epBoardDAO.recommend(rto); 
	}
	@Override
	public void updateCommendCount(int no) throws SQLException{
		epBoardDAO.updateCommendCount(no);
	}
	
	@Override
	public void insertRecommendInfo(RecommendTO rto) throws SQLException{
		epBoardDAO.insertRecommendInfo(rto);
	}



	@Override
	public ArrayList mainList() {
		System.out.println("dsdsdasdfdcvjsdkf");
		return epBoardDAO.mainList();
	}



	@Override
	public ArrayList findTitle(String find) {
		return epBoardDAO.findTitle(find);
	}



	@Override
	public ArrayList findWriter(String find) {
		return epBoardDAO.findWriter(find);
	}
	
}
